package com.museum.guide.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.museum.guide.dto.GuideDTO;
import com.museum.guide.entity.Guide;
import com.museum.guide.mapper.GuideMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 讲解员服务类
 */
@Service
public class GuideService extends ServiceImpl<GuideMapper, Guide> {

    /**
     * 分页查询讲解员列表
     * 
     * @param page     页码
     * @param pageSize 每页条数
     * @param name     讲解员名称
     * @return 分页结果
     */
    public IPage<Guide> getPage(int page, int pageSize, String name) {
        // 构造分页对象
        Page<Guide> pageInfo = new Page<>(page, pageSize);

        // 构造条件
        LambdaQueryWrapper<Guide> queryWrapper = new LambdaQueryWrapper<>();

        // 添加查询条件
        if (StringUtils.isNotBlank(name)) {
            queryWrapper.like(Guide::getName, name);
        }

        // 添加排序条件
        queryWrapper.orderByDesc(Guide::getCreateTime);

        // 执行查询
        this.page(pageInfo, queryWrapper);

        return pageInfo;
    }


    /**
     * 新增讲解员
     * 
     * @param guideDTO 讲解员DTO
     * @return 结果
     */
    @Transactional
    public String save(GuideDTO guideDTO) {
        Guide guide = new Guide();
        BeanUtils.copyProperties(guideDTO, guide);

        // 设置默认值
        if (guide.getStatus() == null) {
            guide.setStatus(1); // 默认启用
        }

        this.save(guide);
        return "添加成功";
    }

    /**
     * 修改讲解员
     * 
     * @param guideDTO 讲解员DTO
     * @return 结果
     */
    @Transactional
    public String update(GuideDTO guideDTO) {
        if (guideDTO.getId() == null) {
            throw new IllegalArgumentException("讲解员ID不能为空");
        }

        Guide guide = super.getById(guideDTO.getId());
        if (guide == null) {
            throw new IllegalArgumentException("讲解员不存在");
        }

        BeanUtils.copyProperties(guideDTO, guide);
        this.updateById(guide);

        return "修改成功";
    }

    /**
     * 删除讲解员
     * 
     * @param id 讲解员ID
     * @return 结果
     */
    @Transactional
    public String remove(Long id) {
        if (id == null) {
            throw new IllegalArgumentException("讲解员ID不能为空");
        }

        this.removeById(id);
        return "删除成功";
    }

    /**
     * 获取所有讲解员列表
     * 
     * @return 讲解员列表
     */
    public List<Guide> listAll() {
        LambdaQueryWrapper<Guide> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Guide::getStatus, 1);
        queryWrapper.orderByDesc(Guide::getCreateTime);

        return this.list(queryWrapper);
    }
}